//
// Created by alice on 25-4-28.
//

#ifndef COMPONENT_H
#define COMPONENT_H

#include <map>
#include "unit.h"
#include "Tag.h"

using std::map;

//这个是表示炮管插槽和口径的枚举
//当炮台类的Slot和炮管类的Slot相同时才合法
enum Slot {
    S, //小型武器
    M, //中型武器
    L, //重型武器
    X, //特殊武器
};


class Component {

protected:
    double energy{}; //表示使用这种炮台需要多少能量
    double money{}; //表示使用这种炮台需要多少钱
    GameTimeType buildTime{}; //这个是需要的建造时间

    //这个是重量和最大负重，当它在底盘以外的零件时，它表示这个零件的重量
    //当它在底盘上时它表示最大负重，若其它配件的重量大于底盘的最大负重则无法建造
    //负重一方面决定这种车是否能合法建造，另一方面影响其速度，加速度和最大速度都受其影响
    double weight{};

public:
    Component() = default;

    virtual ~Component() = 0;

    [[nodiscard]] virtual inline double getMoney() const;
    [[nodiscard]] virtual inline double getEnergy() const;
    [[nodiscard]] virtual inline double getWeight() const;
    [[nodiscard]] virtual inline GameTimeType getBuildTime() const;
    //这四个函数用于获取数值

};


#endif //COMPONENT_H
